﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using NUnit.Framework;          //--> Tests unitaire
using INSTA.AI97.BankApp.BLL;   //--> Notre couche métier

namespace INSTA.AI97.BankApp.Tests
{
    [TestFixture]
    public class Test_Person
    {
        [Test]
        public void Test_Constructor_Params_Zero()
        {
            Person p = new Person();
            bool result = ( p.Name == ""            && 
                            p.FirstName == ""       && 
                            p.YearOfBirth == -1);

            Assert.IsTrue(result);
        }

        [Test]
        public void Test_Constructor_Params_One()
        {
            Person p = new Person("toto");
            bool result = ( p.Name == "TOTO"    && 
                            p.FirstName == ""   && 
                            p.YearOfBirth == -1);

            Assert.IsTrue(result);

        }


        [Test]
        public void Test_Constructor_Params_Two()
        {
            Person p = new Person("toto", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
            bool result = (p.Name == "TOTO"         &&
                           p.FirstName.Length == 12 &&
                           p.YearOfBirth == -1);

            Assert.IsTrue(result);

        }


        [Test]
        public void Test_Constructor_Params_Three()
        {
            Person p = new Person("toto", 
                                  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 
                                  DateTime.Now.Year - 10);
            
            bool result = (p.Name               == "TOTO"   &&
                           p.FirstName.Length   == 12       &&
                           p.YearOfBirth        == DateTime.Now.Year - 10);

            Assert.IsTrue(result);

        }


        [Test]
        public void Test_Property_Name()
        {
            string theName = "toto";
            
            Person p = new Person();
            p.Name = theName;

            // On veut vérifier que le nom est bien en MAJ..
            Assert.IsTrue(p.Name == theName.ToUpper());
        }


        [Test]
        public void Test_Property_FirstName_ForCorrectLength()
        {

            string theName = "toto";

            Person p = new Person();
            p.FirstName = theName;

            // On veut vérifier que le nom est bien en MAJ..
            Assert.IsTrue(p.FirstName == theName);
        }


        [Test]
        public void Test_Property_FirstName_ForOverMaxLength()
        {

            string theName = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

            Person p = new Person();
            p.FirstName = theName;

            // On veut vérifier que le nom est bien en MAJ..
            Assert.IsTrue(p.FirstName.Length == 12);
        }



        [Test]
        public void Test_Property_YearOfBirth_ForUnderMin()
        {
            Person p = new Person();
            p.YearOfBirth = DateTime.Now.Year - 101;

            // On veut vérifier que l'année de naissance est bien -1.
            Assert.IsTrue(p.YearOfBirth == -1);
        }

        [Test]
        public void Test_Property_YearOfBirth_ForOverMax()
        {
            Person p = new Person();
            p.YearOfBirth = DateTime.Now.Year + 1;

            // On veut vérifier que l'année de naissance est bien -1.
            Assert.IsTrue(p.YearOfBirth == -1);
        }


        [Test]
        public void Test_Property_YearOfBirth_ForCorrectRange()
        {
            Person p = new Person();
            p.YearOfBirth = DateTime.Now.Year - 10;

            // On veut vérifier que l'année de naissance est bien -1.
            Assert.IsTrue(p.YearOfBirth == DateTime.Now.Year - 10);
        }


        [Test]
        public void Test_Property_Age_ForCorrectYearOfBirth()
        {
            Person p = new Person();
            p.YearOfBirth = DateTime.Now.Year - 10;

            // On veut vérifier que l'année de naissance 
            // est bien correcte..
            Assert.IsTrue(p.Age == 10);
        }


        [Test]
        public void Test_Property_Age_ForInCorrectYearOfBirth()
        {
            Person p = new Person();
            p.YearOfBirth = DateTime.Now.Year - 1000;

            // On veut vérifier que l'année de 
            // naissance est bien -1.
            Assert.IsTrue(p.Age == -1);
        }




    }
}
